home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / OrganicComboBoxUI.java < prev    next >
Text File  |  1998-06-30  |  7KB  |  228 lines

  1. /*
  2.  * @(#)OrganicComboBoxUI.java    1.6 98/04/10
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20.  
  21. package com.sun.java.swing.plaf.organic;
  22.  
  23. import java.awt.*;
  24. import java.awt.event.*;
  25. import com.sun.java.swing.*;
  26. import com.sun.java.swing.plaf.*;
  27. import com.sun.java.swing.plaf.metal.*;
  28. import com.sun.java.swing.border.*;
  29. import java.io.Serializable;
  30. import com.sun.java.swing.plaf.basic.BasicComboBoxUI;
  31.  
  32.  
  33. /**
  34.  * Organic UI for JComboBox
  35.  * <p>
  36.  * Warning: serialized objects of this class will not be compatible with
  37.  * future swing releases.  The current serialization support is appropriate
  38.  * for short term storage or RMI between Swing1.0 applications.  It will
  39.  * not be possible to load serialized Swing1.0 objects with future releases
  40.  * of Swing.  The JDK1.2 release of Swing will be the compatibility
  41.  * baseline for the serialized form of Swing objects.
  42.  *
  43.  * @see OrganicComboBoxListCellRenderer
  44.  * @see OrganicPopupMenuBorder
  45.  * @version 1.6 04/10/98
  46.  * @author Tom Santos
  47.  */
  48. public class OrganicComboBoxUI extends MetalComboBoxUI  {
  49. /*
  50.     protected OrganicComboBoxButton button;
  51.     protected JButton arrowCache;
  52.  
  53.     private static Border emptyBorder = new BorderUIResource (
  54.                         new EmptyBorder(0,0,0,0));
  55.  
  56.     public static ComponentUI createUI(JComponent c) {
  57.         return new OrganicComboBoxUI();
  58.     }
  59.  
  60.     public void installUI(JComponent c) {
  61.         super.installUI(c);
  62.  
  63.     editablePropertyChanged();
  64.     }
  65.  
  66.     public void uninstallUI( JComponent c ) {
  67.     if ( button != null ) {
  68.         comboBox.remove( button );
  69.         button = null;
  70.     }
  71.  
  72.         super.uninstallUI( c );       
  73.     }
  74.  
  75.     public void paint(Graphics g, JComponent c) {
  76.     }
  77.  
  78.     protected JButton createArrowButton() {
  79.     return new OrganicComboBoxButton( comboBox, new OrganicComboBoxIcon(), true );
  80.     }
  81.  
  82.     public void layoutContainer(Container parent) {
  83.         if ( comboBox.isEditable() ) {
  84.         super.layoutContainer( parent );
  85.     }
  86.     else {
  87.         if ( button != null ) {
  88.             button.setSize( comboBox.getSize().width, comboBox.getSize().height );
  89.         }
  90.     }
  91.     }
  92.  
  93.     public void editablePropertyChanged() {
  94.         if ( comboBox.isEditable() ) {
  95.         if ( button != null ) {
  96.             comboBox.remove( button );
  97.         button = null;
  98.         }
  99.  
  100.         if ( arrowCache != null ) {
  101.             comboBox.add( arrowCache );
  102.         }
  103.  
  104.         super.editablePropertyChanged();
  105.  
  106.         comboBox.setBorder(emptyBorder);
  107.     }
  108.     else {
  109.         removeEditor();
  110.         if ( arrowButton != null ) {
  111.             comboBox.remove( arrowButton );
  112.         arrowCache = arrowButton;
  113.         arrowButton = null;
  114.         }
  115.  
  116.         if ( button == null ) {
  117.             Insets insets = comboBox.getInsets();
  118.             button = new OrganicComboBoxButton( comboBox, new OrganicComboBoxIcon() );
  119.         button.setLocation( 0, 0 );
  120.         button.setSize( comboBox.getSize().width - 2,
  121.                 comboBox.getSize().height );
  122.         }
  123.         comboBox.add( button );
  124.     }
  125.     }
  126.  
  127.     protected void setupListBox(JList listBox, JComboBox comboBox) {
  128.     listBox.setFont(comboBox.getFont());
  129.         listBox.setForeground(UIManager.getColor("ComboBox.listForeground"));
  130.         listBox.setBackground(UIManager.getColor("ComboBox.listBackground"));
  131.         listBox.setSelectionForeground(UIManager.getColor("ComboBox.selectedForeground"));
  132.         listBox.setSelectionBackground(UIManager.getColor("ComboBox.selectedBackground"));
  133.     }
  134.  
  135.     public void focusGained(FocusEvent e) {
  136.         super.focusGained( e );
  137.     if ( button != null ) {
  138.         button.forceDrawFocus( true );
  139.         button.repaint();
  140.     }
  141.     }
  142.  
  143.     public void focusLost(FocusEvent e) {
  144.         super.focusLost( e );
  145.     if ( button != null ) {
  146.         button.forceDrawFocus( false );
  147.         button.repaint();
  148.     }
  149.     }
  150.  
  151.     public CellRendererPane getCurrentValuePane() {
  152.         return currentValuePane;
  153.     }
  154.  
  155.     public void addArrowButton() {
  156.         arrowButton = createArrowButton();
  157.         arrowButton.setRequestFocusEnabled(true);
  158.         arrowButton.resetKeyboardActions();
  159.         comboBox.add(arrowButton);
  160.     }
  161.  
  162.     public void removeArrowButton() {
  163.         if(arrowButton != null) {
  164.             comboBox.remove(arrowButton);
  165.             arrowButton = null;
  166.         }
  167.     }
  168.  
  169.     public void mouseReleased( MouseEvent anEvent ) {
  170.         super.mouseReleased( anEvent );
  171.  
  172.     if ( anEvent.getSource() == listBox && button != null ) {
  173.         button.getModel().setPressed( false );
  174.     }
  175.     else if ( anEvent.getSource() == listBox && arrowButton != null ) {
  176.         arrowButton.getModel().setPressed( false );
  177.     }
  178.     }
  179.  
  180.     public void doMouseDragged( MouseEvent anEvent ) {
  181.         if ( popupIsVisible() ) {
  182.         Window sourceWindow;
  183.         MouseEvent tmp = convertEventToListBox(anEvent);
  184.         updateListBoxSelectionForEvent(tmp,true);
  185.         lastMouseLocation = SwingUtilities.convertPoint((Component)anEvent.getSource(),anEvent.getPoint(),null);
  186.         sourceWindow = SwingUtilities.windowForComponent((Component)anEvent.getSource());
  187.         lastMouseLocation.x += sourceWindow.getBounds().x;
  188.         lastMouseLocation.y += sourceWindow.getBounds().y;
  189.         startAutoscrolling();        
  190.     }
  191.     }
  192.  
  193.     public Dimension getMaximumSize(JComponent c) {
  194.         Dimension basicSize = super.getMaximumSize( c );
  195.     
  196.     if ( !comboBox.isEditable() ) {
  197.         basicSize.height += 4;
  198.     }
  199.  
  200.         return basicSize;
  201.     }
  202.  
  203.  
  204.     public void doMouseReleased( MouseEvent anEvent ) {
  205.         stopAutoscrolling();
  206.     if ( popupIsVisible() ) {
  207.         Object sv;
  208.         MouseEvent tmp = convertEventToListBox(anEvent);
  209.         updateListBoxSelectionForEvent(tmp,true);
  210.         sv = listBox.getSelectedValue();
  211.         if(sv != null)
  212.             comboBox.getModel().setSelectedItem(sv);
  213.         hidePopup();
  214.     }
  215.     }
  216.  
  217.     public void enablePropertyChanged() {
  218.         if ( button != null ) {
  219.         button.setEnabled( comboBox.isEnabled() );
  220.     }
  221.     if ( arrowCache != null ) {
  222.         arrowCache.setEnabled( comboBox.isEnabled() );
  223.     }
  224.     super.enablePropertyChanged();
  225.     }
  226. */
  227. }
  228.